package com.c2c.handler;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

///* 数据库中的数据类型 */
//@MappedJdbcTypes({JdbcType.BIGINT})

/***
 * 上面这一块代码不注释掉java转换jdbc不会触发，原因未知
 */
/* 转化后的数据类型 */
@MappedTypes({Date.class})
public class DateTypeHandler extends BaseTypeHandler<Date> {
    //负责将JAVA类型转换为数据库需要的类型
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException {
        long time = date.getTime();
        preparedStatement.setLong(i, time);
    }

    //负责将数据库中类型转换成JAVA类型
    //String参数   要转换的字段的名称
    //ResultSet  查询出的结果集
    @Override
    public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
        //获取结果集中需要的数据(long) 转换成Date类型 返回
        long aLong = resultSet.getLong(s);
        return new Date(aLong);
    }

    //负责将数据库中类型转换成JAVA类型
    @Override
    public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
        //获取结果集中需要的数据(long) 转换成Date类型 返回
        long aLong = resultSet.getLong(i);
        return new Date(aLong);
    }

    //负责将数据库中类型转换成JAVA类型
    @Override
    public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        long aLong = callableStatement.getLong(i);
        return new Date(aLong);
    }
}